package c16多线程;

/**
 * @author 炜sama
 * 先是main线程与某线程并发执行，当main线程内调用了t.join()后，main线程被阻塞（某线程依然运行）
 * join线程开始与某线程并发执行，直到join线程运行完毕后，main又开始与某线程并发执行。
 * 总结：在线程1中调用线程2.join()的作用是线程1让出处理机给线程2执行完自己再接着运行。
 */
public class join线程 {

	public static void main(String[] args) throws InterruptedException {
		Thread t = new Thread() {
			@Override
			public void run() {
				setName("join线程");
				for (int i = 0; i < 100; i++) {
					System.err.println(Thread.currentThread().getName() + "--" + i);
				}
			}
		};

		new Thread() {
			@Override
			public void run() {
				setName("某线程");
				for (int i = 0; i < 200; i++) {
					System.err.println(Thread.currentThread().getName() + "--" + i);
				}
			}
		}.start();

		for (int i = 0; i < 100; i++) {
			if (i == 20) {
				//注意：应该先start后join！调换位置后虽然不会有错，但是join线程就变成普通线程了，
				//main线程不会等join线程运行完再运行！
				t.start();
				t.join();
			}
			System.err.println(Thread.currentThread().getName() + "--" + i);
		}
	}

}
